package org.truenewx.tnxjee.core.enums;

import java.lang.reflect.Field;
import java.util.Locale;
import java.util.Map;

import org.springframework.core.Ordered;

/**
 * 枚举项解决器
 *
 * @param <T> 枚举项来源类型
 */
public interface EnumItemResolver<T> extends Ordered {

    /**
     * 获取指定对象转换为的枚举项的键，返回null表示不支持该对象转换为枚举项
     *
     * @param object 转换对象
     * @return 枚举项的键
     */
    String getKey(T object);

    /**
     * 获取指定对象转换为的枚举项的值，返回null时将使用与key相同的值
     *
     * @param object 转换对象
     * @return 枚举项的值
     */
    String getValue(T object);

    /**
     * 获取指定对象转换为的枚举项的显示名称，返回null表示采用默认的@Caption注解模式
     *
     * @param subType 子类型名
     * @param field   转换对象在声明类中的静态字段，如果不是类的静态字段，则为null
     * @param object  转换对象
     * @param locale  区域
     * @return 枚举项的显示名称
     */
    default String getCaption(String subType, Field field, T object, Locale locale) {
        return null;
    }

    Map<String, Object> getAttachment(T object);

}
